<?php

require_once("lib/exception/internal_error_exception.php");
require_once("lib/exception/model_exception.php");
require_once("lib/exception/parameters_exception.php");
require_once("lib/exception/privileges_exception.php");

require_once("model/article/to/article_to.php");
require_once("model/article_article_category/to/article_article_category_to.php");
require_once("model/article_category/to/article_category_to.php");
require_once("model/article_category_ping/to/article_category_ping_to.php");
require_once("model/article_comment/to/article_comment_to.php");
require_once("model/article_comment_ping/to/article_comment_ping_to.php");
require_once("model/article_description/to/article_description_to.php");
require_once("model/article_description_ping/to/article_description_ping_to.php");
require_once("model/article_image/to/article_image_to.php");
require_once("model/article_image_ping/to/article_image_ping_to.php");
require_once("model/article_link/to/article_link_to.php");
require_once("model/article_link_ping/to/article_link_ping_to.php");
require_once("model/article_ping/to/article_ping_to.php");
require_once("model/article_video/to/article_video_to.php");
require_once("model/article_video_ping/to/article_video_ping_to.php");


abstract class Article_facade_delegate {
	
	//crea un articulo
	public function create_article($article_to) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//crea una categoria
	public function create_category($article_category_to) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//Existe una categoria(nombre)
	public function exist_category_by_title($title) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//crea una lista de categorias asociadas a un articulo
	public function create_article_category($article_to, $category_list) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//busca una lista de categorias asociadas a un articulo
	public function find_categories_by_article($article_number) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//Elimina una categoria asociada a un articulo
	public function remove_category_for_article($article_number, $category_number, $autor_login) {
		throw Model_exception;
		throw Internal_error_Exception;
		throw Privileges_exception;
	}

	//crea una imagen
	public function create_image($article_image_to) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//Busca una lista de imagenes que corresponden a un articulo
	public function find_images_by_article($article_number) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//Elimina una imagen
	public function remove_image($image_number, $autor_login) {
		throw Model_exception;
		throw Internal_error_Exception;
		throw Privileges_exception;
	}
	
	//crea un video
	public function create_video($article_video_to) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//Busca una lista de videos que corresponden a un articulo
	public function find_videos_by_article($article_number) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//Elimina un video
	public function remove_video($video_number, $autor_login) {
		throw Model_exception;
		throw Internal_error_Exception;
		throw Privileges_exception;
	}
	
	//crea un link
	public function create_link($article_link_to) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//Busca una lista de links que corresponden a un articulo
	public function find_links_by_article($article_number) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//Elimina un link
	public function remove_link($link_number, $autor_login) {
		throw Model_exception;
		throw Internal_error_Exception;
		throw Privileges_exception;
	}
	
	//crea una description
	public function create_description($article_description_to) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//Busca una lista de descriptions que corresponden a un articulo
	public function find_descriptions_by_article($article_number) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//Elimina una description
	public function remove_description($description_number, $autor_login) {
		throw Model_exception;
		throw Internal_error_Exception;
		throw Privileges_exception;
	}
	
	//crea un comment
	public function create_comment($article_comment_to) {
		throw Model_exception;
		throw Internal_error_Exception;
	}

	//busca comentarios por articulo
	public function find_comments_by_article($article_number) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//Elimina un comment
	public function remove_comment($comment_number, $autor_login) {
		throw Model_exception;
		throw Internal_error_Exception;
		throw Privileges_exception;
	}
	
	//Obtiene la lista de las n categorias mas relevantes
	public function find_most_importants_categories() {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//Obtiene la lista de todas las categorias
	public function find_all_categories() {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//Obtiene la lista de los articulos mas recientes
	public function find_most_recent_articles($start_index, $count) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//Obtiene la lista de los articulos mas recientes
	public function find_most_viewed_articles($start_index, $count) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//Busca articulos por palabra clave con varios parametros
	public function find_articles_by_keywords($where, $type, $keywords, $start_index, $count) {
		throw Model_exception;
		throw Internal_error_Exception;	
		throw Parameters_exception;
	}
	
	//Obtener la informacion basica de un articulo
	public function get_basic_article($number) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	
	//Obtener la informacion completa de un articulo
	public function get_full_article($number) {
		throw Model_exception;
		throw Internal_error_Exception;
	}
	

}
?>